//
//  ViewController.m
//  25-多线程
//
//  Created by 鹏飞罗 on 16/8/17.
//  Copyright © 2016年 罗鹏飞. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *myImageView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
//    iOS 下的多线程
//    1.进程和线程
//    什么是进程 ？
   // 当用户下达执行应用程序命令时， 所启动的东西。 进程比作工厂
    // 什么是线程？
//   线程的执行单位， 线程比作工人。
   //2。多线程
   // 为了更好的进行一些程序的操作，节省时间。提高效率。
   // 一个进程不能过多的创建线程， 资源消耗过大（工厂不能有太多的工人， 工资发不起） 开辟5个左右的线程。
   // 注意：所有的UI的操作， 都放在主线程中进行
   //需要开辟线程的耗时操作， 图像文字的渲染， 大数据存储  ，网络请求。
//   3. NSThread
  // 1> currentThread 获取当前线程 <NSThread: 0x60000006d980>{number = 1, name = main}
  //name 线程名 number 线程编号
   // main 代表主线程
    NSThread *thread = [NSThread currentThread];
    
    NSLog(@"%@",thread);
//    2> 开辟子线程执行操作
//  子线程随机创建
    [NSThread detachNewThreadSelector:@selector(newThread) toTarget:self withObject:nil];
    
    [NSThread detachNewThreadWithBlock:^{
        NSThread *thread = [NSThread currentThread];
        NSLog(@"Thread : %@", thread);

    }];
   //3> 延迟当前线程的执行, 固定日期
//    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:10];
//    [NSThread sleepUntilDate:date];
   // 4> 相对时间
//    [NSThread sleepForTimeInterval:10];
//    5> 退出当前线程 不要退出主线程
//     退出后， 线程后续操作不会再执行
//    [NSThread exit];
//    NSLog(@"%@", [NSThread mainThread]);
//    6》threadPriority 线程优先级
  // 默认 线程优先级默认都为0.5
   double priority = [NSThread threadPriority];
    NSLog(@"youxianji%lf", priority);
//    7> name 线程名
    [NSThread mainThread].name = @"xxx的主线程";
    NSLog(@"%@", [NSThread mainThread]);
    
//    8>isMainThread 判断是否是主线程
//    判断当前线程是不是主线程
    [NSThread isMainThread];
//    判断线程对象是不是主线程
    [[NSThread mainThread] isMainThread];
//    9》 初始化方法 需要手动管理线程的生命周期
//     初始化一个未启动的线程
  NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(myThread) object:nil];
    [newThread start];
//   10>  performSelectorInBackground 将耗时的操作， 放入后台执行
//    不关心线程问题
    [self performSelectorInBackground:@selector(imageViewLoadImage) withObject:nil];
//    11> 返回主线程执行操作
    
//    [NSThread detachNewThreadSelector:@selector(imageViewLoadImage) toTarget:self withObject:nil];
    
}
- (void) imageViewLoadImage {
    
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://a.hiphotos.baidu.com/zhidao/pic/item/2e2eb9389b504fc2354426c6e7dde71191ef6dde.jpg"]];
//    返回主线程
    [self performSelectorOnMainThread:@selector(onMainThreadHandleImage:) withObject:data waitUntilDone:YES];
    
}
- (void) onMainThreadHandleImage:(id)object {
    
    self.myImageView.image = [UIImage imageWithData:object];
    
}


- (void) myThread {
    
    for ( int i = 0; i < 1000; i++) {
        if (i == 999) {
            [NSThread exit];
        }
    }

    NSLog(@"%s",__FUNCTION__);
}


- (void)newThread {
    NSThread *thread = [NSThread currentThread];
    thread.name = @"王道林的线程";
    NSLog(@"newThread : %@", thread);
    double priority = [NSThread threadPriority];
    NSLog(@"----%lf", priority);
}


- (IBAction)clicked:(id)sender {
//    for (int i = 0; i < 100000000; i++) {
//        NSLog(@"循环了%d次",i);
    
    
//    }
    
    NSLog(@"点击一亿次");
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end
